A computing device typically executes software, referred to as an “operating system,” responsible for providing an interface between hardware of the computing device and application software. This operating system also generally provides common services for execution of the application software. The operating system may include a number of different components for providing the interface between the hardware and the application software, such as a kernel component, a networking component, a security component and a user interface component. The kernel component (which is often referred to as the “kernel”), may represent the core component that manages or otherwise controls the interface between application software and the hardware of the computing device. The kernel manages the execution of application software by the underlying hardware, instantiating or otherwise creating a process, allocating memory and other hardware resources for use by the process, establishing a priority for the process, loading program instructions into memory and scheduling execution of the loaded instructions associated with the process by the underlying hardware.
In executing the process, one or more of the process instructions may include what are referred to as “system calls.” System calls represent instructions used to invoke or call a system service provided by the operating system for use by application programs. Via system calls, for example, the application program may access file systems presented by the operating system to the application program portion of the computing device (which is commonly referred to as “user space”), manage process execution by the underlying hardware, access network functionality, manage hardware devices, and maintain operating system information (such as time, system data, process, file or device attributes, to name a few examples). Thus, when issuing system calls, the process may interface with the kernel of the operating system to access one or more of these system services, thereby alleviating developers of application programs from having to repeatedly implement such core system services for every different type of operating environment. In effect, the operating system abstracts the underlying hardware specifics, presenting instead a standard interface by which application programs may interface with the underlying hardware without knowing the specifics of the underlying hardware.
The kernel receives these system calls and handles these system calls by providing the system service for use by the process. In some instances, the system call may fail. For certain computing devices, such as network routers, system call failures may result in these routers being unable to process routing protocol message pertinent to the forwarding of data packets through a network. Such failures may therefore impact not only the network router but the network as a whole, where other network routers have to reroute data packets around the failed network router.
System call failures may be especially troublesome for those high-end routers that provide so-called “high-availability” routing functionality. High-availability routing functionality refers to routers that each includes a primary routing engine and a backup routing engine, where the backup routing engine may seamlessly resume routing functionality in the event the primary routing engine fails, thereby providing high availability to routing functionality in the event of failure. Yet, both the primary and backup routing engines typically execute different instances of the same operating system. A failed system call that results in a failure of the primary routing engine is likely to impact the backup routing engine when the application program resumes executing on the backup routing engine. That is, upon resuming execution of the application program with the backup routing engine that issued the system call that resulted in the primary routing engine failure, the application program may re-issue this same system call that more than likely also fails on the backup routing engine (considering the backup and primary routing engines are executing different instances of the same operating system). Consequently, system call failures may be especially troublesome for those high-end routers that provide high-availability routing functionality because such system call failures may result in failures of both the primary and standby or backup routing engine.